Basic Authentication হল একটি সাধারণ অথেন্টিকেশন পদ্ধতি যেখানে ক্লায়েন্ট তার ক্রিডেনশিয়াল (ইউজারনেম এবং পাসওয়ার্ড) প্রতি রিকোয়েস্টের হেডারে Base64 এনকোড করা ফর্ম্যাটে প্রেরণ করে। Spring Security সহজেই Basic Authentication সাপোর্ট প্রদান করে।
Basic Authentication-এর বৈশিষ্ট্য
- সহজ এবং দ্রুত সেটআপ।
- প্রতিটি রিকোয়েস্টে ক্লায়েন্টের ক্রিডেনশিয়াল প্রেরণ করা হয়।
- সাধারণত HTTPS এর মাধ্যমে ব্যবহৃত হয়, কারণ এটি নিরাপত্তার জন্য অত্যন্ত গুরুত্বপূর্ণ।
Spring Security-এ Basic Authentication বাস্তবায়ন
Step 1: Maven ডিপেনডেন্সি যোগ করা
Spring Boot ব্যবহার করলে spring-boot-starter-security ডিপেনডেন্সি যুক্ত করুন।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Step 2: ডিফল্ট Basic Authentication
Spring Boot-এ Spring Security যুক্ত করার পর Basic Authentication ডিফল্টভাবে সক্রিয় থাকে। ডিফল্ট সেটিংস:
/loginএন্ডপয়েন্ট প্রদান করা হয়।- ডিফল্ট ইউজারনেম:
user - অ্যাপ্লিকেশন চালানোর সময় কনসোলে জেনারেট হওয়া একটি পাসওয়ার্ড।
Step 3: Custom Basic Authentication Configuration
Spring Security-তে Basic Authentication কাস্টমাইজ করতে আপনাকে WebSecurityConfigurerAdapter এক্সটেন্ড করতে হবে।
Example Code:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // CSRF সুরক্ষা বন্ধ (REST API-র ক্ষেত্রে সাধারণত বন্ধ রাখা হয়)
.authorizeRequests()
.antMatchers("/public/**").permitAll() // উন্মুক্ত রিসোর্স
.anyRequest().authenticated() // বাকি রিসোর্স অথেন্টিকেশন চায়
.and()
.httpBasic(); // Basic Authentication সক্রিয়
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN")
.and()
.withUser("user").password(passwordEncoder().encode("user")).roles("USER");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Step 4: API Endpoint তৈরি
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/public")
public String publicEndpoint() {
return "This is a public endpoint. No authentication required.";
}
@GetMapping("/private")
public String privateEndpoint() {
return "This is a private endpoint. Authentication required.";
}
}
Step 5: Postman বা Curl দিয়ে টেস্ট করা
Public Endpoint Access:
Public এন্ডপয়েন্ট অ্যাক্সেস করতে কোনো অথেন্টিকেশন প্রয়োজন হয় না।
curl http://localhost:8080/api/publicOutput:
This is a public endpoint. No authentication required.Private Endpoint Access:
Private এন্ডপয়েন্ট অ্যাক্সেস করতে Basic Authentication প্রয়োজন।
curl -u admin:admin http://localhost:8080/api/privateOutput:
This is a private endpoint. Authentication required.
Step 6: HTTP Request-এর Basic Authentication Header
Basic Authentication-এর জন্য ক্লায়েন্টের রিকোয়েস্ট হেডারে একটি এনকোডেড টোকেন পাঠাতে হয়। উদাহরণ:
Base64 Encoding:
echo -n "username:password" | base64যদি ইউজারনেম
adminএবং পাসওয়ার্ডadminহয়, তাহলে Base64 এনকোডিং এর আউটপুট:YWRtaW46YWRtaW4=HTTP Header:
Authorization: Basic YWRtaW46YWRtaW4=
Spring Boot-এ Basic Authentication-এর ডিফল্ট বৈশিষ্ট্য
- User Details Service:
Spring Security ইন-মেমরি অথেন্টিকেশন অথবা ডাটাবেসের মাধ্যমে ইউজার তথ্য সংরক্ষণ করে। - Password Encoding:
Spring Security পাসওয়ার্ড নিরাপদ রাখতে এনকোডিং ব্যবহার করে। ডিফল্টভাবেBCryptPasswordEncoderব্যবহার করা হয়।
Basic Authentication-এর ব্যবহার ক্ষেত্র
- Internal API Communication:
যেখানে ক্লায়েন্ট ও সার্ভার একে অপরের উপর নির্ভরশীল। - Development Environments:
সুরক্ষার জন্য সহজ অথেন্টিকেশন। - Simple Applications:
যেখানে উন্নত অথেন্টিকেশন (যেমন JWT বা OAuth2) প্রয়োজন নেই।
Basic Authentication-এর চ্যালেঞ্জ
- Security Vulnerabilities:
Base64 এনকোডিং সুরক্ষিত নয়; HTTPS ব্যবহার না করলে ম্যান-ইন-দ্য-মিডল আক্রমণ সম্ভব। - Token Reusability:
প্রতিটি রিকোয়েস্টে ক্রিডেনশিয়াল প্রেরণের কারণে সেশন হাইজ্যাকিংয়ের ঝুঁকি। - Limited Scalability:
বড় স্কেলে ব্যবহারের জন্য Basic Authentication যথেষ্ট নয়।
উপসংহার
Spring Security-তে Basic Authentication দ্রুত সেটআপ এবং ব্যবহারযোগ্য একটি পদ্ধতি, যা ছোট বা অভ্যন্তরীণ অ্যাপ্লিকেশনের জন্য উপযুক্ত। বড় বা আরও সুরক্ষিত অ্যাপ্লিকেশনের জন্য OAuth2, JWT ইত্যাদি উন্নত অথেন্টিকেশন পদ্ধতি ব্যবহার করার পরামর্শ দেওয়া হয়।
Read more